/**
 * 单链表有环，是指单链表的最后一个结点的指针指向了链表中的某个结点(通常单链表
 * 最后一个结点的next域为NULL)，试编写算法判断单链表是否存在环.
 * 
 * 思路：
 * 设置两个快慢指针slowNode和fastNode，初始都指向头结点,slow每走一步,fast走两步
 * 如果存在环，必须在若干步骤后fastNode=slowNode,也就是说,slowNode会追上fastNode;
 * 如果没有环,则在遍历结束后,slowNode永远不会追上fastNode.
 */
#include <stdio.h>
#include <stdlib.h>
#define bool int
#define true !0
#define false 0

//单向循环链表结构体定义
typedef struct LNode{
	struct LNode* next;		//后继指针
	int data;				//数据域
}LNode, *LinkedList;

bool core(LinkedList &list)
{
	LNode* fastNode=list;
	LNode* slowNode=list;
	while(fastNode && fastNode->next)
	{
		slowNode=slowNode->next;
		fastNode=fastNode->next->next;
		//相遇了,说明有环
		if(slowNode==fastNode) return true;
	}
	return false;
}